<?php
class ProdutosControle extends Controle {
	public function Init(){
		$this->Titulo('Gerenciamento de Produtos');
		$this->NomeModelo('Produtos');
		parent::Init();
	}

	public function MostraTela(){
		//---------------- Preenchendo a tabela
		$query = $this->GetDao()->CriaQuery();
		$query->from('Produtos as p');
		$res = $query->execute();
		$produtos = '';
		$subcat_opts = '';
		$cat_opts = '';
		$subcats_negada = array(); // lista de subcategorias pertencentes ao protudo, portanto não prescisam aparecer na lista geral de categorias
		
		if(sizeof($res) > 0){

			foreach ($res as $model){
				$status = ($model->get_publicado()) ? 'Publicado' : 'Não publicado';
				$produtos .= "<tr>
								<td>{$model->get_id()}</td>
								<td>{$model->get_nome()}</td>
								<td>{$status}</td>
								<td>
									<a href='?page=produtos&action=editar&id={$model->get_id()}' title='editar'><img src='shell/img/editar.jpg' title='Editar' border='0' /></a> 
							  		<a href='javascript:void(0);' title='deletar' onclick='Produtos.deletar({$model->get_id()})'><img src='shell/img/deletar.jpg' title='Deletar' border='0' /></a>
								</td>
							  </tr>";
			}
		}else{
			$this->EscondeElemento('data-grid');
		}

		//----------------- Configurando exibição de tela de alguns elementos dependendo do contexto
		$lista_imagens = '';
		if(!$this->GetSistema()->GetParametros('id') || $this->GetSistema()->GetParametros('action') == 'salvar'){ //caso não esteja no contexto de edição ou esteja no contexto de salvar, esconde form e imagem
			$this->EscondeElemento('div-form');
			$this->EscondeElemento('imagens-produto');
		}
		
		if($this->GetSistema()->GetParametros('id')){
			$this->EscondeElemento('btn-add');
			$lista_imagens = $this->CarregaImagens();
			
			//----------------- Preenchendo lista de Subcategorias
			$subcats = $this->Modelo()->get_subcategorias();
			if(sizeof($subcats) > 0){
				foreach ($subcats as $subcat){
					array_push($subcats_negada, $subcat->get_id());
					$subcat_opts .= "<option value='{$subcat->get_id()}'>{$subcat->get_descricao()}</option>";
				}
			}
		}

		//----------------- Preenchendo a lista de categorias
		$query = $this->GetDao()->CriaQuery();
		$query->from('Categorias as c');
		$res = $query->execute();
		foreach ($res as $cat){
			$lista_subcats = $cat->get_subcategorias();
			$cat_opts .= "<optgroup label='{$cat->get_descricao()}'>{$cat->get_descricao()}</optgroup>";
			
			foreach ($lista_subcats as $subcat){
				$cat_opts .= (!in_array($subcat->get_id(), $subcats_negada)) ? "<option value='{$subcat->get_id()}'>{$subcat->get_descricao()}</option>" : '';
				//$cat_opts .= "<option value='{$subcat->get_id()}'>{$subcat->get_descricao()}</option>";
			}
			
		}
		$cat_opts .= ($cat_opts != '') ? "<optgroup label='Outros'>Outros</optgroup>" : '';
		
		
		
		
		//----------------- Enviando as variáveis para o view
		$this->AddTagConteudo(array('%lista_produtos%' => $produtos,
									'%galeria_imagens%'=> $lista_imagens,
									'%categorias_options%' => $cat_opts,
									'%subcategorias_options%' => $subcat_opts));
	}

	public function Salvar(){

		if(!$this->GetSistema()->getParametros('publicado')){
			$this->Modelo()->set_publicado(0);
		}

		$dao = $this->GetDao();
		$this->Modelo($dao->salvar($this->Modelo()));

		$subcats = array();
		$subcats = $this->GetSistema()->getParametros('subcategorias');
		$teste_array = array();

		//verificando se a subcategoria atual está tambem no array eviado, caso não eliminemo-as
		for($i = 0; $i < sizeof($this->Modelo()->SubCategorias); $i++){
			array_push($teste_array, $this->Modelo()->SubCategorias[$i]->get_id()); // lista de ids de subcategoria do produto para futura conferencia

			if(!in_array($this->Modelo()->SubCategorias[$i]->get_id(), $subcats)){
				$id = $this->Modelo()->SubCategorias[$i]->get_id();
				$this->Modelo()->unlink('SubCategorias', $id);
			}
		}

		//verificando se as subcategorias enviadas ainda não estão vinculadas, caso não, vincula-as
		foreach($subcats as $sbcat){
			if(!in_array($sbcat, $teste_array)){
				$subCat = $this->GetDao()->busca_por_id('SubCategorias', $sbcat);
				$this->Modelo()->SubCategorias[] = $subCat;
			}
		}

		$this->Modelo()->save();
		Mensagens::NovaMensagem('Sucesso!', 'Produto salvo com sucesso!');
	}

	public function AddImagem(){
		$file = $this->GetSistema()->getParametros('uploadfile');
		$ext = end(explode('.', $file['name']));
		$name = 'img_' . Utils::TimestampAtual() . '.' . $ext;
		$file['name'] = $name;

		$img = new Imagem();
		$img->set_arquivo($file['name']);
		$img->set_fk_produto($this->Modelo()->get_id());
		$img->save();
		
		Utils::Copiar($file, 'img');
		echo 'Sucess';
		die();
	}

	public function CarregaImagens(){
		$imgs = $this->Modelo()->get_imagens();
		$conteiner = '';
		$path = ARQUIVO_PATH_ROOT;

		if(sizeof($imgs) > 0 ){
			foreach($imgs as $img){
				if($img->get_padrao() == 1){
					$status = "<img src='shell/img/favorito_1.jpg' title='Imagem de capa' name='Imagem de capa' />";
				}else{
					$status = "<img src='shell/img/favorito_2.jpg' title='Imagem de galeria' name='Imagem de galeria' onclick='Produtos.seta_favorito({$img->get_id()})' />";
				}

				$div = "<div class='foto-item'>
							<img src='{$path}/img/{$img->get_arquivo()}' title='{$img->get_produto()->get_nome()}' width='125' heigth='100' border='0' onclick='Produtos.show_imagem(this);' /><br />
							<img src='shell/img/deletar.jpg' title='Excluir' border='0' onclick='Produtos.excluir_imagem({$img->get_id()})' /> Remover <br />
							$status
						</div>";
				$conteiner .= $div;
			}
		}
		return $conteiner;
	}

	public function AjaxListaFotos(){
		$lista = $this->CarregaImagens();
		if($lista != ''){
			die($lista);
		}else{
			die('Nenhuma imagem cadastrada <br />');
		}
	}

	public function AjaxRemoveImagem(){
		if($this->GetSistema()->getParametros('img_id')){
			$img = $this->GetDao()->busca_por_id('Imagem', $this->GetSistema()->getParametros('img_id'));
			if($img instanceof Imagem){
				$img_nome = $img->get_arquivo();
				$img->delete();
				
				if(unlink(FILE_ROOT . 'img' . DS . $img_nome)){
					die('1'); //removida
				}else{
					die("2");//desvinculada
				}
				
			}else{
				die('3');//invalido
			}
		}else{
			die('4');//nenhum
		}
	}

	public function AjaxSetaFavoritos(){
		if($this->GetSistema()->getParametros('img_id')){
			$img = $this->GetDao()->busca_por_id('Imagem', $this->GetSistema()->getParametros('img_id'));
			if($img instanceof Imagem){
				$img->set_padrao(1);
				$img->save();
				
				$query = $this->GetDao()->CriaQuery();
				$query->from('Imagem i');
				$query->where('i.id != ?', $img->get_id());
				$res = $query->execute();
				foreach($res as $imagem){
					$imagem->set_padrao(0);
					$imagem->save();
				}
				die('Sucesso!');
			}
		}
	}
}